﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Practices.Unity;
using System.IO;
using Autocentro.Entities;
using Autocentro.BussinesLogic;


namespace Autocentro.UI
{
    public partial class FrmTrabajador : Form
    {
        [Dependency]
        public ITrabajadorBL TrabajadorBL { get; set; }
        [Dependency]
        public IImagenTrabajadorBL ImagenTrabajadorBL { get; set; }

        public TRABAJADOR CURRENTTrabajador
        { 
            get{return tRABAJADORBindingSource.Current as TRABAJADOR;}
            set{tRABAJADORBindingSource.DataSource = value;}
        }


        public FrmTrabajador()
        {
            InitializeComponent();
            this.BuildUp();
        }
        private void CargarData()
        {
            var criterio = txtCriterio.Text == string.Empty ? null : txtCriterio.Text;
            tRABAJADORBindingSource.DataSource = TrabajadorBL.GetFromTrabajadoresByCriterio(criterio);
            TRABAJADOR currentTrabajador = tRABAJADORBindingSource.Current as TRABAJADOR;
            if (currentTrabajador!=null)
            {
                ExtrarImagen();
            }
            else
            {
                imagenPictureBox.Image = null;
            }
        }
        private void btnBuscar_Click(object sender, EventArgs e)
        {
            CargarData();
        }

        private void txtCriterio_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsLetter(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (char.IsNumber(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void txtCriterio_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                CargarData();
            }
        }

        private void btnNuevo_Click(object sender, EventArgs e)
        {
            var frmMttTrabajador = new FrmMttTrabajador();
            frmMttTrabajador.AddTrabajador();
            frmMttTrabajador.ShowDialog();
            tRABAJADORBindingSource.DataSource = TrabajadorBL.GetAllFromTrabajadores();
            TRABAJADOR currentTrabajador = tRABAJADORBindingSource.Current as TRABAJADOR;
            if (currentTrabajador != null)
            {
                ExtrarImagen();
            }
            else
            {
                imagenPictureBox.Image = null;
            }
        }
        private void ExtrarImagen()
        {
            var trabajador = tRABAJADORBindingSource.Current as TRABAJADOR;

            if (trabajador!=null)
            {
                var img = ImagenTrabajadorBL.GetTrabajadorIamgenById(trabajador.Id);
                if (img.Imagen !=null)
                {
                    MemoryStream stream = new MemoryStream(img.Imagen);
                    imagenPictureBox.Image = Image.FromStream(stream);
                }
                else
                {
                    imagenPictureBox.Image = imagenPictureBox.ErrorImage;
                }
            }
        }
        private void btnEditar_Click(object sender, EventArgs e)
        {
            TRABAJADOR CurrentTrabajador = tRABAJADORBindingSource.Current as TRABAJADOR;
            if (CurrentTrabajador!=null)
            {
                var FrmMttTrabajador = new FrmMttTrabajador();
                FrmMttTrabajador.HabilitarCampos();
                FrmMttTrabajador._trabajador = CurrentTrabajador;
                FrmMttTrabajador.UpdateTrabajador();
                FrmMttTrabajador.ShowDialog();

                CargarData();
                ExtrarImagen();
            }
            else
            {
                MessageBox.Show("Debe seleccionar un Trabajador", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            var trabajador = tRABAJADORBindingSource.Current as TRABAJADOR;
            if (trabajador!=null)
            {
                var rpt = MessageBox.Show(this,
                   string.Format("¿Desea Eliminar el Trabajador: {0}?","\n "+ trabajador.Nombres +" "+trabajador.apPaterno +" "+trabajador.apMatero),
                   "Mensaje",
                   MessageBoxButtons.YesNo,
                   MessageBoxIcon.Question);

                if (rpt == DialogResult.Yes)
                {
                    TrabajadorBL.RemoveTrbajador(trabajador.Id);
                    CargarData();
                    ExtrarImagen();
                }
            }
            else
            {
                MessageBox.Show("Debe seleccionar un Trabajador", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }

        private void FrmTrabajador_Load(object sender, EventArgs e)
        {
            CargarData();
            ExtrarImagen();
        }

        private void tRABAJADORDataGridView_Click(object sender, EventArgs e)
        {
            ExtrarImagen();
        }

        private void tRABAJADORDataGridView_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Up || e.KeyCode == Keys.Down)
            {
                ExtrarImagen();
            }
        }

        private void tRABAJADORDataGridView_CurrentCellChanged(object sender, EventArgs e)
        {
            ExtrarImagen();
        }

        private void tRABAJADORDataGridView_DoubleClick(object sender, EventArgs e)
        {
            CURRENTTrabajador = tRABAJADORBindingSource.Current as TRABAJADOR;
            Close();
        }

    }
}
